package com.luom.fsp.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.luom.fsp.model.dto.userCoupon.UserCouponQueryRequest;
import com.luom.fsp.model.entity.Coupon;
import com.luom.fsp.model.entity.UserCoupon;
import com.luom.fsp.model.vo.CouponVO;
import com.luom.fsp.model.vo.UserCouponVO;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;

/**
 * 用户-优惠券关联表服务
 *
*/
public interface UserCouponService extends IService<UserCoupon> {

    /**
     * 校验数据
     *
     * @param userCoupon
     * @param add 对创建的数据进行校验
     */
    void validUserCoupon(UserCoupon userCoupon, boolean add);

    /**
     * 获取查询条件
     *
     * @param userCouponQueryRequest
     * @return
     */
    QueryWrapper<UserCoupon> getQueryWrapper(UserCouponQueryRequest userCouponQueryRequest);
    
    /**
     * 获取用户-优惠券关联表封装
     *
     * @param userCoupon
     * @param request
     * @return
     */
    UserCouponVO getUserCouponVO(UserCoupon userCoupon, HttpServletRequest request);

    /**
     * 分页获取用户-优惠券关联表封装
     *
     * @param userCouponPage
     * @param request
     * @return
     */
    Page<UserCouponVO> getUserCouponVOPage(Page<UserCoupon> userCouponPage, HttpServletRequest request);

    /**
     * 购买优惠券
     * @param userCoupon
     * @param request
     * @return
     */
    long addUserCoupon(UserCoupon userCoupon, HttpServletRequest request);

    /**
     * 获取当前金额用户可用优惠券列表
     * @param money
     * @param request
     * @return
     */
    List<CouponVO> listUserCouponVOByPage(BigDecimal money, HttpServletRequest request);

    /**
     * 创建优惠券
     * @param userCoupon
     * @param coupon
     * @return
     */
    long createUserCoupon(UserCoupon userCoupon, Coupon coupon);
}
